﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
#include<assert.h>
//int main()
//{
//	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//	//             0 1 2 3 4 5 ...
//	int arr2[20] = { 0 };
//	//             0 1 2 3 4 5 ...
//	//想把arr1中的10个整数，拷贝到arr2中
//	//循环遍历
//	memcpy(arr2, arr1, 40);
//	//浮点数也可以
//	float arr3[] = { 1.2f,2.2f,3.2f,4.2f,5.5f };
//	float arr4[10] = { 0 };
//	memcpy(arr4, arr3, 5 * sizeof(float));
//
//	return 0;
//}


//void* my_memcpy(void* dest, const void* src, size_t num)
//{
//	void* ret = dest;
//	assert(dest && src);
//	while (num--)
//	{
//		*(char*)dest = *(char*)src;
//		src = (char*)src + 1;
//		dest = (char*)dest + 1;
//	}
//	return ret;
//}
//int main()
//{
//	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[20] = { 0 };
//	my_memcpy(arr2, arr1, 40);
//
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	memcpy(arr + 2, arr, 20);
//
//	return 0;
//}

//int main()
//{
//	//内存不重叠
//	int arr1[] = { 1,2,3,4,5,6,7,8,9 };
//	int arr2[20] = { 0 };
//	//memcpy;
//	memmove(arr2, arr1, 20);
//	
//	//内存重叠
//	int arr[] = { 1,2,3,4,5,6,7,8,9 };
//	memmove(arr + 2, arr, 20);
//	return 0;
//}

//void* my_memmove(void* dest, void* src, size_t num)
//{
//	assert(dest && src);
//	void* ret = dest;
//	if (dest < src)
//	{
//		while (num--)
//		{
//			*(char*)dest = *(char*)src;
//			dest = *(char*)dest + 1;
//			src = *(char*)src + 1;
//		}
//	}
//	else {
//		while (num--)
//		{
//			*((char*)dest + num) = *((char*)src + num);
//		}
//	}
//	return ret;
//}
//int main()
//{
//	//内存不重叠
//	int arr1[] = { 1,2,3,4,5,6,7,8,9 };
//	int arr2[20] = { 0 };
//	//memcpy;
//	my_memmove(arr2, arr1, 20);
//
//	//内存重叠
//	int arr[] = { 1,2,3,4,5,6,7,8,9 };
//	my_memmove(arr + 2, arr, 20);
//	return 0;
//}

//int main()
//{
//	char arr[] = "hello world";
//	memset(arr + 2, 'x', 5);
//	printf("%s\n", arr);
//	return 0;
//}
//
//int main()
//{
//	int arr[10] = { 0 };
//	memset(arr, 1, 40);//将每个字节设为0x01而不是每个数组元素
//	printf("%d\n", arr[0]);
//	return 0;
//}

//int main()
//{
//	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[] = { 1,2,3,4,8 };
//	int r = memcmp(arr1, arr2, 17);
//	if (r > 0)
//		printf(">\n");
//	else if(r<0)
//		printf("<\n");
//	else
//		printf("==\n");
//
//	return 0;
//}

//int main()
//{
//	int a = 0x11223344;
//	return 0;
//}

//法一
//int main()
//{
//	int a = 1;
//	if (*(char*)&a == 1)
//	{
//		printf("小端\n");
//	}
//	else {
//		printf("大端\n");
//	}
//	return 0;
//}
////法二
//int check_sys()
//{
//	int a = 1;
//	return (*(char*)&a);
//}
//int main()
//{
//	if (check_sys() == 1)
//		printf("小端\n");
//	else
//		printf("大端\n");
//	return 0;
//}

//int main()
//{
//	char a = -1;
//	//10000000 00000000 00000000 00000001
//  //11111111 11111111 11111111 11111110
//  //11111111 11111111 11111111 11111111
//  //11111111 - a
//	//整型提升
//	//11111111 11111111 11111111 11111111
//	signed char b = -1;
//	unsigned char c = -1;
//	//10000000 00000000 00000000 00000001
//	//11111111 11111111 11111111 11111110
//	//11111111 11111111 11111111 11111111
//	//11111111 - c
//	//无符号数，高位补零
//	//00000000 00000000 00000000 11111111
//	printf("a = %d, b = %d, c = %d", a, b, c);
//	//%d - 是以十进制的形式打印有符号的整数(认为我们要打印的数据在内存中是以有符号数的补码进行存储的)
//	return 0;
//}

//int main()
//{
//	char a = -128;
//	//10000000 00000000 00000000 10000000
//	//11111111 11111111 11111111 01111111
//	//11111111 11111111 11111111 10000000
//    //10000000 - a
//    //11111111 11111111 11111111 10000000
//    printf("%u\n", a);//4,294,967,168
//	//%u 是以十进制的形式打印无符号的整数 - 内存中存储的是无符号数的补码
//	return 0;
//}
//int main()
//{
//	char a = 128;
//	//00000000 00000000 00000000 10000000
//	//10000000 - a
//	//11111111 11111111 11111111 10000000
//	printf("%u\n", a);
//	return 0;
//}

//int main()
//{
//	char a[1000];                 //-129
//	//-128~127                     10000000 00000000 00000000 10000001
//	int i;                       //11111111 11111111 11111111 01111110
//	for (i = 0; i < 1000; i++)   //11111111 11111111 11111111 01111111
//	{                            //01111111
//		a[i] = -1 - i;           //127
//	}                            //00000000 00000000 00000000 01111111
//	//-1 -2 -3 -4......-1000       01111111
//
//	printf("%d", strlen(a));//统计\0之前的
//	//-1 -2 -3 -4......-128 127 126 125......3 2 1 0
//	//127 + 128 == 255
//	return 0;
//}

//unsigned char i = 0;
//int main()
//{
//	for (i = 0; i <= 255; i++)//死循环，放不下255
//	{
//		printf("hello world\n");
//	}
//	return 0;
//}
//#include <windows.h>
//int main()
//{
//	unsigned int i;
//	for (i = 9; i >= 0; i--)//0-- 
//	{
//		printf("%u\n", i);//死循环
//		Sleep(100);
//	}
//	return 0;
//}

//X86环境 ⼩端字节序 
//int main()
//{
//	int a[4] = { 1, 2, 3, 4 };
//	int* ptr1 = (int*)(&a + 1);
//	int* ptr2 = (int*)((int)a + 1);
//	printf("%x, %x", ptr1[-1], *ptr2);//0x4,小端存储0x02000000
//	//%x 是以16进制的形式打印数据
//	return 0;
//}

int main()
{
	int n = 9;
	float* pFloat = (float*)&n;
	printf("n的值为：%d\n", n);
	printf("*pFloat的值为：%f\n", *pFloat);
	
	*pFloat = 9.0;
	printf("n的值为：%d\n", n);
	printf("*pFloat的值为：%f\n", *pFloat);
	return 0;
}

//int main()
//{
//	float f = 9.5f;
//	//1001.1
//	//1.0011 * 2^3
//	//(-1)^0 * 1.0011 * 2^3
//	//S = 0
//	//M = 1.0011
//	//E = 3
//	// 3+127=130
//	//0 10000010 0011000 000000000 00000000
//	//   0x41     18       00        00
//	
//	return 0;
//}